import gradio as gr
import os
from dotenv import load_dotenv, find_dotenv # 导入 find_dotenv 帮助定位
import requests

# 加载 .env 文件中的环境变量 (增强调试)
load_dotenv(dotenv_path=find_dotenv(usecwd=True), verbose=True, override=True)

local_url = os.getenv("LOCAL_URL")


def process_message(message: str, history: list) -> list:
    """处理用户消息并返回更新后的对话历史"""
    if not message:
        return history

    try:
        history = history or []  # 确保history是列表
        history.append({"role": "user", "content": message})
        url = f"{local_url}/chat?query={message}"
        result = requests.post(url).json()
        history.append({"role": "assistant", "content": result})
        return history
    except Exception as e:
        history = history or []
        history.append({"role": "user", "content": message})
        history.append({"role": "assistant", "content": "事已至此，老夫也无力回天啊！"})
        print(f"发生错误 -> {str(e)}")
        return history


# 创建界面
with gr.Blocks(title="算命大师", theme=gr.themes.Soft()) as ui:
    gr.Markdown("""
    #  算命大师

    大师可以为你：
    1.  测八字 - 需要输入用户姓名和出生年月日时（需要gpt4）
    2.  摇一卦 - 需要会员（= =b）
    3.  解梦 - 聊一聊你昨晚梦到了什么（需要gpt4）
    4.  测测今年的运势 - 必须输入用户的生日
    """)

    chatbot = gr.Chatbot(
        label="对话历史",
        height=500,
        show_copy_button=True,
        type="messages",  # 使用新的消息格式
        avatar_images=(
            "D://代码//AIStudy//RAG//bot//avatar//用户头像.jpg", # 用户头像（默认使用Gradio样式）
            "D://代码//AIStudy//RAG//bot//avatar//陈瞎子.png", # 助手头像
        )
    )

    with gr.Row():
        input_text = gr.Textbox(
            label="输入文本",
            placeholder="请输入需要处理的内容...",
            lines=3
        )

    with gr.Row():
        submit_btn = gr.Button("提交", variant="primary")
        clear_btn = gr.Button("清除历史")

    # 绑定事件
    submit_btn.click(
        process_message,
        inputs=[input_text, chatbot],  # 添加 chatbot 作为输入
        outputs=chatbot,
        queue=False
    ).then(
        lambda: "",
        None,
        input_text,
        queue=False
    )

    # 返回空列表清除历
    clear_btn.click(lambda: [], None, chatbot, queue=False)


# 启动界面
ui.launch(
    server_name="127.0.0.1",
    server_port=7860,
    share=False,
    inbrowser=True
)
